﻿#define _CRT_SECURE_NO_WARNINGS 1

//Linux开发工具

//一、软件包管理器 

//1.1什么是软件包 

//在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进⾏编译, 得到可执行程序
//但是这样太麻烦了, 于是有些⼈把⼀些常用的软件提前编译好, 做成软件包(可以理解成windows上
//的安装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装
//软件包和软件包管理器, 就好比"App"和"应用商店"这样的关系.
//yum(Yellow dog Updater,  Modified)是Linux下非常常用的一种包管理器. 主要应用在Fedora, 
//RedHat,  Centos等发行版上 
//Ubuntu：主要使用apt（Advanced Package Tool）作为其包管理器。apt同样提供了自动解决依
//赖关系、下载和安装软件包的功能

//1.2Linux安装软件

//1.源代码暗黄
//2.rpm安装---linux安装
//3.yum/apt安装---解决安装源、安装版本、安装依赖

//1.3Linux软件生态

//1.3.1Linux下载软件的过程（Ubuntu、Centos、other）

//1.3.2为什么会有⼈免费特定社区提供软件，还发布？还提供云服务器让下载？

//1.开源会让更多的人来使用，让生态更完善，就有了非常强的市场占有率
//2.开源，让使用人对其产生依赖性，然后就会有人去捐赠，从而维护自己的软件

//1.3.3Linux的生态评估

//从六个方面来评估：社区论坛、官方文档、软件体系，维护更新速度、操作系统自身、富有针对性的客户群体

//1.4yum/apt具体操作 

//1.4.1查看软件包 

//关于rzsz：首先来介绍一下rzsz：rz就是将windows上的文件传到Linux中，而sz就是将linux中的文件传至windows中

//通过 yum list命令可以罗列出当前一共有哪些软件包。由于包的数目可能非常之多, 这里我们需要使用
//grep 命令只筛选出我们关注的包。
//例如:

//# Centos
//$ yum list | grep lrzsz
//lrzsz.x86_64 0.12.20 - 36.el7 @base

//# Ubuntu
//$ apt search lrzsz
//Sorting... Done
//Full Text Search... Done

//cutecom / focal 0.30.3 - 1build1 amd64
//Graphical serial terminal, like minicom

//lrzsz/jammy,now 0.12.21-10 amd64 [installed]
//Tools for zmodem / xmodem / ymodem file transfer


//注意:
//软件包名称 : 主版本号.次版本号.源程序发行号 - 软件包的发⾏号.主机平台.cpu架构
//"x86_64"后缀表示64位系统的安装包, "i686"后缀表示32位系统安装包.选择包时要和系统匹配
//"el7"表示操作系统发行版的版本，"el7"表示的是centos7 / redhat7."el6"表示centos6 / redhat6
//最后一列, base表示的是"软件源"的名称, 类似于"苹果应用商店", "华为应用商店"这样的概念


//1.4.2安装软件
//通过yum, 我们可以通过很简单的一条命令完成gcc的安装

//# Centos下安装
//$ sudo yum install - y lrzsz

//# Ubuntu下安装
//$ sudo apt install - y lrzsz

//• yum/apt会自动找到都有哪些软件包需要下载,这时候敲"y"确认安装
//• 出现"complete"字样或者中间未出现报错, 说明安装完成

//注意:
//（1）安装软件时由于需要向系统目录中写入内容, 一般需要sudo或者切到root账户下才能完成
//（2）yum/apt安装软件只能一个装完了再装另一个，正在yum / apt安装一个软件的过程中, 如果再尝试用
//yum/apt安装另外一个软件, yum / apt会报错

//1.4.3卸载软件---仍然是⼀条命令:

//# Centos下卸载
//sudo yum remove[-y] lrzsz

//# Ubuntu下卸载
//sudo apt remove[-y] lrzsz

//1.5安装源

//Cetnos安装源路径查看：
//$ ll / etc / yum.repos.d /
//total 16
//- rw - r--r-- 1 root root 676 Oct 8 20:47 CentOS - Base.repo # 标准源
//- rw - r--r-- 1 root root 230 Aug 27 10:31 epel.repo # 扩展源


//Ubuntu安装源路径查看：
//$ cat/etc/apt/sources.list # 标准源
//$ ll etc/apt/sources.list.d / # 扩展源


//有些需要安装扩展源：
//# 安装扩展源
//# $ sudo yum install - y epel - release

//1.6练习安装的几个小软件：

//1.安装sl，输入sl会有一个小火车凑够屏幕右边缓慢走到屏幕左边
//2.安装cowsay：输入cowsay + 你想说的话会出现一直牛然后说这句话

//二、编辑器Vim


//2.1Linux编辑器vim使用

//vi/vim的区别简单点来说，它们都是多模式编辑器，不同的是vim是vi的升级版本，它不仅兼容vi的所
//有指令，而且还有一些新的特性在里面。例如语法加亮，可视化操作不仅可以在终端运行，也可以运
//行于xwindow、macos、windows。

//注意：vi/vim不同于Windows下的vs，vim/vi只是一个编辑器（编写代码的多模式编辑器）

//2.2vim的基本概念
//vim的三种模式(其实有好多模式，目前主要使用以下3种模式), 分别是命令模式（command
//mode）、插入模式（Insert mode）和底行模式（last line mode），各模式的功能区分如下： 

//（1）正常/普通/命令模式(Normal mode) 
//控制屏幕光标的移动，字符、字或行的删除，移动复制某区段及进入Insert mode下，或者到 last line mode 
//（2）插入模式(Insert mode) 
//只有在Insert mode下，才可以做文字输入，按「ESC」键可回到命令⾏模式。该模式是我们后面用的最频繁的编辑模式。
//（3）底行模式(last line mode) 
//文件保存或退出，也可以进行文件替换，找字符串，列出⾏号等操作。
//在命令模式下， * shift + :* 即可进入该模式。要查看你的所有模式：打开 vim，底⾏模式直接输入:help vim - modes
//我这里一共有12种模式:six BASIC modes和six ADDITIONAL modes 


//2.3 vim的基本操作 

//• 进入vim, 在系统提示符号输入vim及文件名称后，就进入vim全屏幕编辑画面: 
//• $ vim test.c
//• 当进入vim之后，是处于[命令模式]，会默认所有的指令都是命令，一般不会作为文本输入

//[正常模式]切换至[插入模式] 
//输入a 
//输入i 
//输入o 

//[插入模式]切换至[命令模式] 
//目前处于[插入模式]，就只能一直输入文字，如果发现输错了字, 想用光标键往回移动，将该字删
//除，可以先按一下「ESC」键转到[正常模式]再删除文字。当然，也可以直接删除。 

//[正常模式]切换至[底行模式] 
//【shift  +  ; 】,  其实就是输入冒号（:） 
//退出vim及保存文件, 在[正常模式]下，按一下【:】冒号键进入【Last line mode】
//然后选择以下指令进行操作
//: w （保存当前文件）
//:w！（强制保存当前文件）
//: wq (输入wq, 存盘并退出vim) 
//: q! (输入q!, 不存盘强制退出vim)
//:wq！（强制保存并退出）

//2.4 vim命令模式下的命令集 

//（1）从命令模式转换成插入模式
//• 按i切换进入插⼊模式【insert mode】，按“i”进入插入模式后是从光标当前位置开始输入文件；
//• 按a进入插入模式后，是从目前光标所在位置的下一个位置开始输入文字
//• 按o进入插入模式后，是插入新的一行，从行首开始输入文字 

//（2）从插入模式切换为命令模式
//• 按【ESC】键。 

//（3）移动光标
//• vim可以直接用键盘上的光标来上下左右移动，但正规的vim是用⼩写英文字母h、j、k、l，分别控制光标左、下、上、右移一格 
//• 按 shift+g（G）：移动到文章的最后 
//• 按 shift+4（$）：移动到光标所在行的“行尾”
//• 按 shift+6（^）：移动到光标所在行的“行首”
//• 按 w：光标跳到下个字（或者单词）的开头 （常用）
//• 按 e：光标跳到下个字（或者单词）的字尾 
//• 按 b：光标回到上个字（或者单词）的开头 （常用）
//• 按 nl：光标移到该行的第n个位置，如：5l, 56l 
//• 按 gg：进入到文本开始 
//• 按 ctrl+b：屏幕往“后”移动一页 
//• 按 ctrl+f：屏幕往“前”移动一页 
//• 按 ctrl+u：屏幕往“后”移动半页
//• 按 ctrl+d：屏幕往“前”移动半页 

//（4）删除文字
//• x：每按一次，删除光标所在位置的一个字符
//• nx：删除光标所在位置的后面（包含自己在内）n个字符，例如，6x 表示删除光标所在位置的后面（包含自己在内）6个字符 
//• X：大写的X，每按一次，删除光标所在位置的“前面”一个字符 
//• nX：删除光标所在位置的“前面”n个字符，例如，20X 表示删除光标所在位置的“前面”20个字符 
//• dd：删除光标所在行
//• ndd：从光标所在行开始删除n行（n位常数）

//（5）复制
//• yw：将光标所在之处到字尾的字符复制到缓冲区中
//• nyw：复制n个字到缓冲区
//• yy：复制光标所在行到缓冲区
//• nyy：拷贝从光标所在行依次往下数的n行。例如，6yy表示拷贝从光标所在的该行依次往下数的6行文字
//• p：将缓冲区内的字符贴到光标所在行的下一行。注意：所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能
//• np：贴贴n个重复行复制的内容到光标所在的下一行（n是常数）

//（6）替换
//• r：替换光标所在处的字符
//• nr：替换光标往后（包括光标所在位置）n个的字符
//• R：替换光标所到之处的字符，直到按下 ESC 键为止

//（7）撤销上一次操作
//• u：如果误执行一个命令，可以马上按下 u，回到上一个操作。按多次“u”可以执行多次回复
//• ctrl + r:撤销之前的撤销

//（8）更改
//• cw：更改光标所在处的字到字尾处 
//• cnw：表示更改n个字，例如：c3w表示更改3个字
//• ~：表示讲小写字符改成大写字符

//（9）剪切
//• dd：剪切走光标所在行或者删除光标所在行
//• p：贴贴上次所剪切的行到光标所在行

//（10）跳至指定的行
//• ctrl+g：列出光标所在行的行号
//• nG：跳转至第n行。例如：15G，表示移动光标至文章的第15行首


//2.5vim底行模式下的命令集

//在使用底行模式之前，请记住先按ESC键确定您已经处于正常模式，再按冒号（：）即可进入末行模式

//（1）分屏两个文件进行操作：
//• vs+文件名，两个文件窗口来回切换操作：ctrl+ww

//（2）列出行号
//• set nu:输入set nu后，会在文件中的每一行前面列出行号
//• set nonu:输入set nonu后，会去掉文件中的每一行前面列出行号

//（3）跳到文件中的某一行
//• #:#号表示一个数字，在冒号后输入一个数字，再按回⻋键就会跳到该行了，如输入数字15，再回车，就会跳到文章的第15行

//（4）查找字符
//• / 关键字:先按/键，再输入您想寻找的字符，如果第一次找的关键字不是您想要的，可以一直按n会往后寻找到您要的关键字为止
//• ? 关键字：先按?键，再输入您想寻找的字符，如果第一次找的关键字不是您想要的，可以一直按n会往前寻找到您要的关键字为止

//（5）保存⽂件
//• w:在冒号输入字母w就可以将文件保存起来

//（6）离开vim
//• q：按q就是退出，如果无法离开vim，可以在q后跟一个!强制离开vim
//• wq：一般建议离开时，搭配w一起使⽤，这样在退出的时候还可以保存文件


